Unit ID
dqpeOzapTptz1QPBle8PiMF7bYTcfsIEA8jdn8O9Ggg=
Received
06.08.2021 11:45:22
Confirmation delay (full node)
3 minutes 7 seconds
Confirmation delay (light node)
4 minutes 27 seconds
Messages
Definition
Definition: [ "autonomous agent", { "init": "{\r $nom_AA = 'Accions';\r \r //$_Registre = '5WVBJQHTEP54AEYUJGTQKWTXTXZSJQWA';\r $_Registre = trigger.data._Registre; // * només x tests\r \r // $_Portal = $__dada( '_Portal' );\r $_Portal = trigger.address; // * només x tests\r if ( $_Portal != trigger.address ) bounce( 'Portal no reconegut' );\r \r // Arguments, abreviacions, constants\r $args = trigger.data;\r $adr__ = trigger.initial_address;\r $id_unitat = trigger.output[[ asset != base ]].asset;\r $qt = trigger.output[[ asset = $id_unitat ]];\r $ACC = $args.accio otherwise '';\r $ref = $args.ref;\r $nom = $args.nom;\r $volum_escala = $args.volum_escala;\r $interficie = $args.interficie;\r $promotora = $args.promotora;\r $nou_ordinal_accio = $args.nou_ordinal_accio;\r $cicle_actual = $args.cicle_actual;\r $escala_actual = $args.escala_actual;\r $interval_escala = $args.interval_escala;\r $nova_escala = $args.nova_escala;\r $_FOP = $args._FOP;\r $id_estels = $args.Estels;\r $data_nova_escala = $args.data_nova_escala;\r $dades = $args.dades otherwise {};\r $args.sentit = 'entrada';\r $provisio_registre = $args.provisio_registre;\r $provisio = $id_unitat == 'none';\r $geto = $args.geto;\r $estat_geto = $args.estat_geto;\r $_FOP_accio = $args._FOP_accio;\r \r \r // Funció per obtenir una dada del registre\r $__dada = $refval =>\r data_feed[[ oracles = $_Registre, feed_name = $refval, ifnone = false ]];\r \r // Funcions auxiliars\r // Obté valor argument especificat o bota el procés\r $__arg = $arg =>\r $args[ $arg ] otherwise\r bounce( "Cal proporcionar el valor de: " || $arg );\r \r // Obté valor definidor del getó utilitzat\r $__definidor = $refdef => {\r $geto == 'Estels' ?\r $__dada( $refdef ) :\r $__dada( $geto || '_' || to_lower( $refdef ) )\r };\r \r // Comprova si adreça activada per operar amb getó especificat\r $__activada = ( $refgeto, $adre ) =>\r !! $__dada( 'activacio_' || $refgeto || '_' || $adre ) ?\r true :\r bounce( 'Adreça no activada per a ' || $refgeto );\r \r // Comprova si qt proporcionada cobreix import especificat\r $__qtSuficient = $refimport, $q => {\r $import_requerit = $__definidor( $refimport );\r $import_requerit > $q ?\r bounce( "L'" || $refimport || " és de " || $import_requerit )\r : true\r };\r \r // Comprova si adreça consta com a subscrita\r $__subscrita = $adr =>\r !! $__dada( 'subscripcio_' || $geto || '_' || $adr ) ?\r true :\r bounce( "Adreça no subscrita per a " || $geto );\r \r // Consulta si acció restringida\r $__accRestringida = $ac => {\r $geto == 'Estels' ?\r false :\r $__dada( $geto || '_' || to_lower( $ac ) || 'ns_restringides' ) == 1\r };\r \r // Si acció restringida per al getó especificat, comprova si adreça capacitada\r $__capacitada = ( $ac, $ad ) => {\r $capacitacio = $__dada( $geto || '_' || $ac || '_' || $ad );\r $__accRestringida( $ac ) AND ! $capacitacio ?\r bounce( 'Acció restringida i adreça no capacitada' ) :\r true\r };\r \r // Nou total per a registrar\r $__nou_total = ( $ref_tot, $increment ) => {\r $nou_total = $__dada( 'total_' || $ref_tot ) otherwise 0;\r $dades[ 'total_' || $ref_tot ] = $nou_total + $increment;\r };\r \r // Incrementa sumatoris d'entrades compensables\r $__increment_sumatoris_compensables = $increment => {\r $__nou_total( 'FOP_' || $geto || '_via_' || $interficie, $increment );\r $__nou_total( 'FOP_' || $geto || '_per_' || $promotora, $increment );\r };\r \r // ...\r $registre = {};\r $registre.dades = $dades;\r }", "messages": { "cases": [ { "if": "{ $ACC == 'Activacio' AND ! $provisio }", "init": "{\r $ord_activacio = 'activacio_' || $geto || '_' || $nou_ordinal_accio;\r $ref_activacio = 'activacio_' || $geto || '_' || $adr__;\r \r if ( !! $__dada( $ref_activacio ) )\r bounce( 'Adreça ja activada per a ' || $geto );\r \r $condicions =\r $__qtSuficient( 'Import_Activacio', $qt )\r AND $__capacitada( 'Activacio', $adr__ );\r \r $dades[ $ref_activacio ] = $ord_activacio;\r $dades[ $ord_activacio || '_data' ] = timestamp;\r $dades[ $ord_activacio || '_nom' ] = $nom;\r $dades[ $ord_activacio || '_qt' ] = $qt;\r $dades[ $ord_activacio || '_cicle' ] = $cicle_actual;\r if ( $geto == 'Estels' )\r $dades[ $ord_activacio || '_escala' ] = $escala_actual;\r $dades[ $ord_activacio || '_interval' ] = $interval_escala;\r $dades[ 'ordinal_activacio_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( 'activacions_' || $geto, $qt );\r $__increment_sumatoris_compensables( $qt );\r $dades[ 'volum_escala_' || $geto ] = $volum_escala + $qt;\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_accio }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{\r response[ 'Nom' ] = $nom;\r response[ 'Adreça' ] = $adr__;\r response[ 'Getó' ] = $geto;\r }" } ] }, { "if": "{ $ACC == 'Subscripcio' AND ! $provisio }", "init": "{\r $ord_subscripcio = 'subscripcio_' || $geto || '_' || $nou_ordinal_accio;\r $ref_subscripcio = 'subscripcio_' || $geto || '_' || $adr__;\r $ordinal_renovacio_actual = $__dada( 'ordinal_renovacio_' || $geto ) otherwise 0;\r $nou_ordinal_renovacio = $ordinal_renovacio_actual + 1;\r $ord_renovacio = 'renovacio_' || $nou_ordinal_renovacio;\r $ref_renovacio = 'renovacio_' || $geto || '_' || $adr__;\r \r if ( !! $__dada( $ref_subscripcio ) )\r bounce( 'Adreça ja subscrita per a ' || $geto );\r \r $condicions =\r $__qtSuficient( 'Import_Subscripcio', $qt )\r AND $__capacitada( 'Subscripcio', $adr__ );\r //AND $__arg( 'nom' )\r //AND $__arg( 'aportacio' );\r \r $dades[ $ref_subscripcio ] = $ord_subscripcio;\r $dades[ $ord_subscripcio || '_data' ] = timestamp;\r $dades[ $ord_subscripcio || '_nom' ] = $nom;\r $dades[ $ord_subscripcio || '_aportacio' ] = $args.aportacio;\r $dades[ $ord_subscripcio || '_cicle' ] = $cicle_actual;\r $dades[ 'ordinal_subscripcio_' || $geto ] = $nou_ordinal_accio;\r $dades[ $ref_renovacio ] = $ord_renovacio;\r $dades[ $ord_renovacio || '_data' ] = timestamp;\r $dades[ $ord_renovacio || '_cicle' ] = $cicle_actual;\r $dades[ 'ordinal_renovacio_' || $geto ] = $nou_ordinal_renovacio;\r $__nou_total( 'subscripcions_' || $geto, $qt );\r $__increment_sumatoris_compensables( $qt );\r $dades[ 'volum_escala_' || $geto ] = $volum_escala + $qt;\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_accio }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{\r response[ 'Nom' ] = $nom;\r response[ 'Adreça' ] = $adr__;\r response[ 'Getó' ] = $geto;\r }" } ] }, { "if": "{ $ACC == 'Renovacio' AND ! $provisio }", "init": "{\r $ord_renovacio = 'renovacio_' || $geto || '_' || $nou_ordinal_accio;\r $ref_renovacio = 'renovacio_' || $geto || '_' || $adr__;\r $cicle_renovat = $__dada( $ord_renovacio || '_cicle' ) otherwise 1;\r \r $condicions =\r $__subscrita( $adr__ )\r AND $__qtSuficient( 'Import_Renovacio', $qt );\r \r if ( $cicle_actual == $cicle_renovat )\r bounce( 'Cicle actual ( ' || $cicle_actual || ' ) ja renovat' );\r \r $dades[ $ref_renovacio ] = $ord_renovacio;\r $dades[ $ord_renovacio || '_data' ] = timestamp;\r $dades[ $ord_renovacio || '_cicle' ] = $cicle_actual;\r $dades[ 'ordinal_renovacio_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( 'renovacions_' || $geto, $qt );\r $__increment_sumatoris_compensables( $qt );\r $dades[ 'volum_escala_' || $geto ] = $volum_escala + $qt;\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_accio }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{\r response[ 'Cicle renovat' ] = $cicle_actual;\r response[ 'Getó' ] = $geto;\r }" } ] }, { "if": "{ $ACC == 'Diposit' AND ! $provisio }", "init": "{\r $ord_diposit = 'diposit_' || $geto || '_' || $nou_ordinal_accio;\r $ref_diposit = 'diposit_' || $geto || '_' || $adr__;\r $diposit_minim = $__definidor( 'Diposit_Minim' );\r \r $condicions =\r $__subscrita( $adr__ )\r AND $__capacitada( 'Conversio', $adr__ );\r \r if ( $qt < $diposit_minim )\r bounce( 'El dipòsit mínim és de ' || $diposit_minim );\r \r $ord_renovacio = $__dada( 'renovacio_' || $geto || '_' || $adr__ );\r $cicle_renovat = $__dada( $ord_renovacio || '_cicle' );\r \r if ( $cicle_renovat < $cicle_actual )\r bounce( 'Subscripció no renovada. Darrer cicle renovat: ' ||\r $cicle_renovat || ' Cicle actual: ' || $cicle_actual );\r \r $taxa_conversio = $__definidor( 'Taxa_Conversio' );\r $cicles_diposit = $__definidor( 'Cicles_Diposit' );\r $factor_conversio = $__definidor( 'factor_conversio' ) otherwise 1;\r $cicle_conversio = $cicle_actual + $cicles_diposit;\r $taxa = round( $qt * $factor_conversio * $taxa_conversio / 100, 0 );\r $qt_conversio = $qt - $taxa;\r $dades[ $ref_diposit ] = $ord_diposit;\r $dades[ $ord_diposit || '_qt' ] = $qt;\r $dades[ $ord_diposit || '_dipositant' ] = $adr__;\r $dades[ $ord_diposit || '_cicle' ] = $cicle_actual;\r $dades[ $ord_diposit || '_geto_diposit' ] = $geto;\r $dades[ $ord_diposit || '_data' ] = timestamp;\r $dades[ $ord_diposit || '_taxa' ] = $taxa_conversio;\r $dades[ $ord_diposit || '_qt_conversio' ] = $qt_conversio;\r $dades[ $ord_diposit || '_cicle_conversio' ] = $cicle_conversio;\r $dades[ 'ordinal_diposit_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( 'diposits_' || $geto, $qt );\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{\r response[ $ord_diposit ] = $ref_diposit;\r response[ 'Qt dipòsit' ] = $qt;\r response[ 'Qt conversió' ] = $qt_conversio;\r response[ 'Cicle conversió' ] = $cicle_conversio;\r }" } ] }, { "if": "{ $ACC == 'Contribucio' AND ! $provisio }", "init": "{\r $condicio = $__capacitada( 'Contribucio', $adr__ );\r \r $ord_contribucio = 'contribucio_' || $geto || '_' || $nou_ordinal_accio;\r $ref_contribucio = 'contribucio_' || $geto || '_' || $adr__;\r $dades[ $ref_contribucio ] = $ord_contribucio;\r $dades[ $ord_contribucio || '_qt' ] = $qt;\r $dades[ $ord_contribucio || '_geto' ] = $geto;\r $dades[ $ord_contribucio || '_contribuidora' ] = $adr__;\r $dades[ $ord_contribucio || '_cicle' ] = $cicle_actual;\r $dades[ $ord_contribucio || '_escala' ] = $escala_actual;\r $dades[ $ord_contribucio || '_interval' ] = $interval_escala;\r $dades[ $ord_contribucio || '_data' ] = timestamp;\r $dades[ 'ordinal_contribucio_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( 'contribucions_' || $geto , $qt );\r $__increment_sumatoris_compensables( $qt );\r $dades[ 'volum_escala_' || $geto ] = $volum_escala + $qt;\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_accio }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{\r response[ $ord_contribucio ] = $ref_contribucio;\r response[ 'Contribuïdora' ] = $adr__;\r response[ 'Quantitat' ] = $qt;\r }" } ] }, { "if": "{ $ACC == 'Transfer' AND ! $provisio }", "init": "{\r //$receptora = $__arg( 'receptora' );\r $receptora = $args.receptora;\r \r $condicions =\r $__activada( 'Estels', $receptora )\r AND $__activada( $geto, $receptora )\r AND $__capacitada( 'Recepcio', $receptora );\r \r $ref_subscripcio = 'subscripcio_' || $geto || '_' || $receptora;\r $ord_subscripcio = $__dada( $ref_subscripcio );\r $ref_renovacio = 'renovacio_' || $geto || '_' || $receptora;\r $ord_renovacio = $__dada( $ref_renovacio );\r $cicle_renovacio = $__dada( $ord_renovacio || '_cicle' ) otherwise 0;\r $receptora_renovada = $cicle_renovacio == $cicle_actual;\r $dades[ 'ordinal_transfer_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( 'transfers_' || $geto, $qt );\r $args.qt_transfer = $qt;\r \r if ( $ord_subscripcio AND $receptora_renovada ) {\r $percent_aportacio = $__dada( $ord_subscripcio || '_aportacio' );\r $qt_aportacio = floor( $qt * $percent_aportacio / 100 );\r $args.qt_transfer = $qt - $qt_aportacio;\r $args.emissora = $receptora;\r $__nou_total( 'aportacions_' || $geto, $qt_aportacio );\r $__nou_total( 'aportacions_' || $geto || '_' || $receptora, $qt_aportacio );\r $__increment_sumatoris_compensables( $qt_aportacio );\r $dades[ 'volum_escala_' || $geto ] = $volum_escala + $qt_aportacio;\r }\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "if": "{ !! $qt_aportacio }", "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_accio }", "amount": "{ $qt_aportacio }" }, { "address": "{ $receptora }", "amount": "{ $args.qt_transfer }" } ] } }, { "if": "{ ! $qt_aportacio }", "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $receptora }", "amount": "{ $args.qt_transfer }" } ] } }, { "app": "state", "state": "{\r if ( !! $qt_aportacio )\r response[ 'Receptora aporta en '|| $geto ] = $qt_aportacio;\r }" } ] }, { "if": "{ $ACC == 'Conversio' AND ! $provisio }", "init": "{\r $qt_dipositada = $__dada( $ref || '_qt' );\r \r if ( ! $qt_dipositada )\r bounce( 'Dipòsit desconegut' );\r \r $qt_conversio = $__dada( $ref || '_qt_conversio' );\r $geto_diposit = $__dada( $ref || '_geto_diposit' );\r $cicle_conversio = $__dada( $ref || '_cicle_conversio' );\r $ord_renovacio = $__dada( 'renovacio_' || $geto_diposit || '_' || $adr__ );\r $cicle_renovat = $__dada( $ord_renovacio || '_cicle' );\r $id_unitat_conversio = $geto_diposit == 'Estels' ? 'base' : $id_estels;\r $unitat_conversio = $geto_diposit == 'Estels' ? 'Bytes' : 'Estels';\r $ref_conversio = 'conversio_' || $ref;\r $ord_conversio = 'conversio_' || $geto || '_' || $nou_ordinal_accio;\r \r if ( $adr__ != $__dada( $ref || '_dipositant' ))\r bounce( "L'adreça receptora ha de ser la dipositant" );\r \r if ( !! $__dada( $ref_conversio ))\r bounce( 'Aquest dipòsit ja ha estat convertit' );\r \r if ( $cicle_conversio > $cicle_actual )\r bounce( "Encara no és l'hora" );\r \r if ( $cicle_renovat < $cicle_actual )\r bounce( "No renovada en " || $geto_diposit ||\r " per al cicle actual: " || $cicle_actual );\r \r $dades[ $ref_conversio ] = $ord_conversio;\r $dades[ $ord_conversio || '_data' ] = timestamp;\r $dades[ $ord_conversio || '_qt' ] = $qt_conversio;\r $dades[ $ord_conversio || '_unitat' ] = $unitat_conversio;\r $dades[ $ord_conversio || '_rebedora' ] = $adr__;\r $dades[ 'ordinal_conversio_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( 'conversions_' || $geto_diposit, $qt_dipositada );\r $__nou_total( 'taxes_' || $geto_diposit, ( $qt_dipositada - $qt_conversio ));\r \r $args.qt = $qt_conversio;\r $args.rebedora = $adr__;\r $args.sentit = 'sortida';\r $args.id_unitat_sortida = $id_unitat_conversio;\r $args.unitat_sortida = $unitat_conversio;\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP }", "amount": "{ $qt }" } ] } } ] }, { "if": "{ $ACC == 'Retribucio' OR $ACC == 'Bonificacio' AND ! $provisio }", "init": "{\r $acc = to_lower( $ACC );\r $ord_acc = $acc || '_' || $geto || '_' || $nou_ordinal_accio;\r \r if ( $ACC == 'Bonificacio' ) {\r $ord_activac = $__dada( 'activacio_' || $geto || '_' || $adr__ )\r otherwise bounce( 'Activació inexistent' );\r $import = $__dada( $ord_activac || '_qt' );\r $escala = $__dada( $ord_activac || '_escala' );\r $interval = $__dada( $ord_activac || '_interval' );\r $ref_bonificacio = 'bonificacio_' || $escala_actual || '_' || $geto || '_' || $adr__;\r \r }\r \r if ( $ACC == 'Retribucio' ) {\r $import = $__dada( $ref || '_qt' ) \r otherwise bounce( 'Contribució desconeguda' );\r $geto_contribucio = $__dada( $ref || '_geto' );\r $escala = $__dada( $ref || '_escala' );\r $interval = $__dada( $ref || '_interval' );\r \r if ( $geto_contribucio != $geto )\r bounce( "El getó utilitzat i el de la contribució han de ser el mateix" );\r \r if ( $adr__ != $__dada( $ref || '_contribuidora' ))\r bounce( "Només l'adreça contribuïdora pot rebre la retribució" );\r \r $ref_retribucio = 'retribucio_' || $ref || '_escala_' || $escala_actual;\r $dades[ $ord_acc || '_rebedora' ] = $adr__;\r \r // La retribució hi és pendent\r if ( !! $__dada( $ref_retribucio ))\r bounce( "Ja ha estat retribuïda per a l'escala actual" );\r \r // Cal que s'hagi produït un salt d'escala\r if ( $escala_actual == $escala )\r bounce( "Cal que es produeixi un salt d'escala" );\r \r /* Comentat temporalment per a facilitar els tests !!\r \r // Cal que hagi passat igual o més temps entre la data del salt d'escala i la de la\r //retribució que entre la data del salt d'escala de la contribucio i la data d'aquesta\r \r $diferencia_intervals = $interval_escala - $interval;\r if ( $diferencia_intervals < 0 )\r bounce( "Encara no és l'hora" );\r \r */\r }\r \r $ref_acc = $ref_bonificacio otherwise $ref_retribucio;\r \r // Determina la qt de la retribució\r $qt_acc = $import * ( $escala_actual - $escala );\r \r //...\r $dades[ $ref_acc ] = $ord_acc;\r $dades[ $ord_acc || '_data' ] = timestamp;\r $dades[ $ord_acc || '_qt' ] = $qt_acc;\r $dades[ $ord_acc || '_geto' ] = $geto;\r $dades[ 'ordinal_' || $acc || '_' || $geto ] = $nou_ordinal_accio;\r $__nou_total( $acc || 'ns_' || $geto, $qt_acc );\r \r $args.qt = $qt_acc;\r $args.rebedora = $adr__;\r $args.sentit = 'sortida';\r $args.id_unitat_sortida = $id_unitat;\r $args.unitat_sortida = $geto;\r \r $registre.dades = $dades;\r }", "messages": [ { "app": "data", "payload": "{ $registre || $args }" }, { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{ $_Registre }", "amount": "{ $provisio_registre }" } ] } }, { "app": "payment", "payload": { "asset": "{ $id_unitat }", "outputs": [ { "address": "{ $_FOP_accio }", "amount": "{ $qt }" } ] } }, { "app": "state", "state": "{\r response[ 'Getó' ] = $geto;\r response[ 'Import' ] = $qt_acc;\r response[ 'Escala' ] = $escala;\r }" } ] } ] } } ]
Technical information
Fees:
19,745 bytes
(452 headers, 19293 payload)
Level:2180658
Witnessed level:2180651
Main chain index:2170957
Latest included mc index:2170956
Status:stable/confirmed/final